#ifndef RESPONSE_GET_IMAGE_H_INCLUDED
#define RESPONSE_GET_IMAGE_H_INCLUDED

/**
* @file response_get_image.h
*
*	 Nel file response_get_image.h viene definita la classe che gestisce la comunicazione
*	 tra il Service Provider che offre il servizio di Get_Image ed il Client
*	
* @author Favale Angelo
* @author Fagioli Alessio
*
* @version 1.0
*/

#include "libreria.h"

/**
* @class Response_Get_Image
*
*	 La classe Response_Get_Image gestisce la comunicazione tra il Service Provider ed il
*	 client che vuole richiedere il servizio di Get_Image.
*/
class Response_Get_Image
{
	private:
		char name[BUFFER_SIZE];	/**< Nome del Servizio (Get_Image)	  	   */
		host entita;		/**< Mantiene informazioni sull'entità con cui deve
					*    scambiare informazioni			   */
	public:
		/**
		* Il costrutture carica le informazioni riguardanti l'entità con cui deve 
		* comunicare
		*/
		Response_Get_Image(host);

		/**
		* @param nome_file Nome dell'immagine che il client deve riceve dal Service 
		*		   Provider
		* @param len_file Dimensione dell'immagine che il client deve riceve dal
		*		  Service Provider
		*
		* @return true se la ricezione dell'immagine è andata a buon fine, false 
		*	  altrimenti
		*
		* Questo metodo consente al client di ricevere dal Service Provider 
		* l'immagine chiamata nome_file
		*/
		bool receive_image( char * nome_file, int len_file );

		/**
		* @param buffer Messaggio da decodificare
		* @param nome_file Nome dell'immagine ritornata per riferimento
		*
		* @return true se la decodifica del messaggio è andata a buon fine, false 
		*	  altrimenti
		*
		* Questo metodo permette al Service Provider di decodificare il messaggio 
		* inviato dal client.
		* In particolare vengono estratte le informazioni sul nome dell'immagine che
		* si deve inviare al client
		*/
		bool decode_request( char * buffer, char * nome_file );

		/**
		* @param buffer Messaggio codificato ritoranato per riferimento
		* @param nome_file Nome del immagine che il client vuole ricevere
		*
		* @return true se il messaggio contenente il nome dell'immagine è stato
		*	  inviato correttamente al Service Provider, false altrimenti
		*
		* Questo metodo permette al client di inviare al Service Provider la
		* richiesta per ricevere l'immagine nome_file
		*/
		bool code_request( char * buffer, char * nome_file);

		/**
		* @param len_file Dimensione dell'immagine da inviare
		* @param verify Indica al client se l'immagine è presente
		*
		* Questo metodo permette al Service Provider di far sapere al client la 
		* dimensione dell'immagine che vuole ricevere.
		* Nel caso in cui verify vale true allora il client riceverà la conferma 
		* della presenza dell'immagine richiesta, altrimenti l'immagine non c'è
		*/
		bool code_response( int len_file, bool verify );

		/**
		* @param buf Messaggio da decodificare
		* @param lunghezza_file Dimensione dell'immagine che si vuole ricevere 
		*			ritornata per riferimento
		*
		* @return true se l'immagine richiesta è presente sul Service Provider, false
		*	  altrimenti
		*
		* Questo metodo permette al client di capire se l'immagine richiesta è
		* presente sul Service Provider
		*/
		bool decode_response( char *buf, char * lunghezza_file );	
} ;
#endif
